In recent years, embedded software performance analysis has been widely used to identify and improve software timing issues in embedded software. Examples of such timing issues include: slow response times during user interaction, e.g., it takes too long between a button activation and a responsive window opening; missed deadlines in real time software, e.g., a software driver that interacts with a hardware peripheral needs to read output data within a fixed time after writing the input data to prevent data loss, and unacceptably slow start up or “boot” time of an operating system.
Under the conventional art, software performance, e.g., embedded software performance, is typically measured on the target hardware, for example, at a point in a development cycle after the hardware has been designed, fabricated and is otherwise available. Although such performance measurements performed on the target hardware have a high degree of accuracy, such hardware based performance measurements suffer from several serious drawbacks.
A first drawback of hardware based performance measurement is that such a process can only be performed very late in a development cycle, e.g., after the hardware is available. As an unfortunate consequence, there is little time available to improve the software, and essentially no opportunity to modify the hardware, particularly integrated circuits.
Another drawback of hardware based performance measurement is that such a process generally is unable to provide visibility into the cause(s) of performance issues. Yet another drawback of hardware based performance measurement is that such processes generally require expensive and specialized laboratory equipment to perform the measurements. For example, such measurements may require high speed oscilloscopes, logic analyzers, in-circuit emulation (ICE) equipment and the like.
A still further drawback of hardware based performance measurement is that such a process is not generally accessible to a typical software developer. For example, hardware based performance measurements are typically performed by a team of highly trained individuals with specialized skills, e.g., including designers of the hardware. It is appreciated that typical target hardware is designed and optimized for a particular function, and many internal functions are deliberately hidden from end users, e.g., for ease of use and proprietary reasons, making performance testing and instrumentation difficult. Such a team including particular skill sets is generally required to set up tests and extract the results from hardware.